#if !defined(FAKE_D3D10_ASYNCHRONOUS_H)
#define FAKE_D3D10_ASYNCHRONOUS_H

#include <d3d10.h>
#include "Fakes/FakeD3D10DeviceChild.h"
#include <rt/Exceptions/NotImplementedException.h>

class FakeD3D10Asynchronous : public ID3D10Asynchronous
{
public:
	FakeD3D10Asynchronous()
		: DeviceChild()
	{ }

	CONTAIN_DEVICE_CHILD(DeviceChild)

	virtual void STDMETHODCALLTYPE Begin() { throw rt::NotImplementedException(); }
	virtual void STDMETHODCALLTYPE End() { throw rt::NotImplementedException(); }
	virtual HRESULT STDMETHODCALLTYPE GetData(void *pData, UINT DataSize, UINT GetDataFlags) { throw rt::NotImplementedException(); }
	virtual UINT STDMETHODCALLTYPE GetDataSize() { throw rt::NotImplementedException(); }
};

#define CONTAIN_ASYNCHRONOUS(member_) \
	CONTAIN_DEVICE_CHILD(DeviceChild) \
	FakeD3D10Asynchronous member_; \
	virtual void STDMETHODCALLTYPE Begin() { return member_.Begin(); } \
	virtual void STDMETHODCALLTYPE End() { return member_.End(); } \
	virtual HRESULT STDMETHODCALLTYPE GetData(void *pData, UINT DataSize, UINT GetDataFlags) { return member_.GetData(pData, DataSize, GetDataFlags); } \
	virtual UINT STDMETHODCALLTYPE GetDataSize() { return member_.GetDataSize(); }

#endif
